//
//  WFUserAccountViewModel.swift
//  WangFangWeiBo
//
//  Created by 王方 on 16/7/12.
//  Copyright © 2016年 wf. All rights reserved.
//

import UIKit

class WFUserAccountViewModel: NSObject {
    //设置单例
    static let sharedUserAccount:WFUserAccountViewModel = WFUserAccountViewModel()
    
    //获取用户对象的从沙盒中拿到的对象
    var userAccount:WFUserAccount?{
        return WFUserAccount.loadUserAccount()
    }
    
    //私有化构造函数,让其不能用这种方式创建
    private override init() {
        super.init()
    }
    
    //再封装一个判断是否登录
    var isLogin:Bool {
        return accessToken != nil
    }
    
    //封装判断accessToken是否为nil
    var accessToken:String?{
        guard let token = userAccount?.access_token else {
            return nil
        }
        //走到这里,说明确实是不为nil的,那么接下来就判读token的日期是不是过期就可以了
      let result  =  userAccount?.expiresDate?.compare(NSDate())
        //使用降序表示我们进行从大到小的排列
        if result == NSComparisonResult.OrderedDescending {
            return token
        }else{
            return nil
        }
    }
    
    
    //封装网络请求于此viewmodel中
    // MARK:  - 通过授权码请求网络获取token
    func requestAccessToken(code:String,callBack:((isSuccess:Bool)->())){
    
        WFNetWorkTools.sharedTools.requsetAccessToken(code) { (response, error) -> () in
            if error != nil {
                //说明网络请求有误
                print(error)
                callBack(isSuccess: false)
            }else{
                //说明网络请求成功
                guard let dic = response else {
                    print("不是一个正常的dic")
                    callBack(isSuccess: false)
                    return
                }
                //到这里为止,dic返回是正确的
                let userAccount = WFUserAccount(dic:dic as! [String : AnyObject])
                
                print(userAccount)
                // MARK:  - 网络请求获取用户信息
                self.requestUserInfo(userAccount,callBack: callBack)
            }
        }
    }
    // MARK:  - 获取用户信息
    private func requestUserInfo(userInso:WFUserAccount,callBack:((isSuccess:Bool)->())){
        WFNetWorkTools.sharedTools.requestUserInfo(userInso) { (response, error) -> () in
            if error != nil {
                //说明网络请求有误
                 callBack(isSuccess: false)
                print(error)
            }else{
                //说明网络请求成功
                guard let dic = response else {
                    print("不是一个正常的dic")
                     callBack(isSuccess: false)
                    return
                }
                //到这里为止,dic返回是正确的
                //获取名字
                let name = dic["name"]
                //获取头像
                let avatar_large = dic["avatar_large"]
                
                //设置给userInso
                userInso.name = name as? String
                userInso.avatar_large = avatar_large as? String
                print(userInso)
                //保存到沙盒中
                let result =  userInso.saveUserAccount()
                if result{
                callBack(isSuccess: true)
                }else{
                callBack(isSuccess: false)
                }
                
            }
        }
    }
}
